#include "pycallbyc.h"


PyCallByC::PyCallByC()
{
    Py_Initialize();
    if(!Py_IsInitialized()){
        PyErr_Print();
    }
}

PyCallByC::~PyCallByC()
{
    Py_DECREF(_pModule);
    Py_DECREF(_pFunc);
    // 在窗口调用这个函数
    //Py_Finalize();
}

void PyCallByC::setScriptPath(const char *path)
{
    // 导入sys模块设置模块地址，以及python脚本路径
    PyRun_SimpleString("import sys");
    QString script = "sys.path.append('";
    script += path;
    script +=  "')";
    // 该相对路径是以build...为参考的
    PyRun_SimpleString(script.toUtf8());
    qDebug() << script;
}

bool PyCallByC::setPModule(const char *moduleName)
{
    _pModule = PyImport_ImportModule(moduleName);
    if(!_pModule) { // 脚本加载成功与否
        PyErr_Print();
        return false;
    } else {
        return true;
    }
}

bool PyCallByC::setPFunc(const char *funcName)
{
    _pFunc = PyObject_GetAttrString(_pModule, funcName);
    if(!_pFunc || !PyCallable_Check(_pFunc)) { // 函数创建成功与否
        PyErr_Print();
        return false;
    } else {
        return true;
    }
}

PyObject *PyCallByC::CallFunc(PyObject *args)
{
    if(args == nullptr) {
        return PyObject_CallObject(_pFunc, nullptr);
    } else {
        return PyObject_CallObject(_pFunc, args);
    }
}


